//package com.topcent.tioxyc.douyin.service;
//
///**
// * @author: 陈百万
// * @date: 2025/6/19 14:37
// * @Description:
// */
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.google.zxing.BarcodeFormat;
//import com.google.zxing.MultiFormatWriter;
//import com.google.zxing.client.j2se.MatrixToImageWriter;
//import com.google.zxing.common.BitMatrix;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.net.HttpURLConnection;
//import java.net.URL;
//import java.nio.charset.StandardCharsets;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Scanner;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.TimeUnit;
//
///**
// * 抖音直播评论数据获取服务
// */
//@Component
//public class DouyinLiveCommentService {
//    private static final Logger logger = LoggerFactory.getLogger(DouyinLiveCommentService.class);
//
//    // 抖音API接口地址
//    private static final String QRCODE_URL = "https://sso.douyin.com/get_qrcode/";
//    private static final String CHECK_LOGIN_URL = "https://sso.douyin.com/check_login/";
//    private static final String ACCESS_TOKEN_URL = "https://open.douyin.com/oauth/access_token/";
//    private static final String LIVE_COMMENT_URL = "https://open.douyin.com/live/comment/";
//
//    // 应用凭证
//    private final String clientKey = "tt6be71d5af4eefcd010";
//    private final String clientSecret = "4020108bc2047670e8ef0327d76410db4fdc9d22";
//
//    // 会话凭证
//    private String accessToken;
//    private String refreshToken;
//    private long expiresIn;
//    private long tokenCreateTime;
//
//    // 直播间ID
//    private String roomId;
//
//    // 定时任务执行器
//    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
//
//    /**
//     * 启动抖音直播评论监听服务
//     */
//    public void startService(String roomId) {
//        this.roomId = roomId;
//
//        try {
//            // 1. 执行扫码登录流程
//            String loginToken = getLoginToken();
//            generateQRCode(loginToken, "D:\\img\\douyin_qrcode.png");
//            logger.info("请使用抖音APP扫描生成的二维码进行登录: douyin_qrcode.png");
//
//            // 2. 等待用户扫码登录
//            boolean isLoggedIn = waitForLogin(loginToken);
//            if (!isLoggedIn) {
//                logger.error("登录超时或失败");
//                return;
//            }
//
//            // 3. 获取AccessToken
//            obtainAccessToken();
//
//            // 4. 启动直播间评论监听
//            startCommentListener();
//
//        } catch (Exception e) {
//            logger.error("启动服务失败", e);
//        }
//    }
//
//    /**
//     * 获取登录Token
//     */
//    private String getLoginToken() throws Exception {
//        URL url = new URL(QRCODE_URL + "?next=https://creator.douyin.com");
//        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//        conn.setRequestMethod("GET");
//        conn.setRequestProperty("Referer", "https://creator.douyin.com");
//
//        try (Scanner scanner = new Scanner(conn.getInputStream(), StandardCharsets.UTF_8)) {
//            String response = scanner.useDelimiter("\\A").next();
//            JSONObject json = JSONObject.parseObject(response);
//            return json.getJSONObject("data").getString("token");
//        }
//    }
//
//    /**
//     * 生成登录二维码
//     */
//    private void generateQRCode(String token, String filePath) throws Exception {
//        String qrContent = "https://sso.douyin.com/login/?token=" + token;
//        BitMatrix bitMatrix = new MultiFormatWriter().encode(qrContent, BarcodeFormat.QR_CODE, 300, 300);
//        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", new File(filePath).toPath());
//    }
//
//    /**
//     * 等待用户扫码登录
//     */
//    private boolean waitForLogin(String loginToken) throws Exception {
//        int retryCount = 0;
//        while (retryCount < 60) { // 最多等待5分钟
//            URL url = new URL(CHECK_LOGIN_URL + "?token=" + "a361499086fdea469d168b9f61706f54_lf");
//            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//            conn.setRequestMethod("GET");
//            conn.setRequestProperty("Referer", "https://creator.douyin.com");
//
//            try (Scanner scanner = new Scanner(conn.getInputStream(), StandardCharsets.UTF_8)) {
//                String response = scanner.useDelimiter("\\A").next();
//                JSONObject json = JSONObject.parseObject(response);
//                JSONObject data = json.getJSONObject("data");
//
//                if (data != null && data.getBooleanValue("is_login")) {
//                    logger.info("用户已扫码登录成功");
//                    return true;
//                }
//
//                logger.info("等待用户扫码登录中... {}", retryCount);
//                Thread.sleep(5000); // 每5秒检查一次
//                retryCount++;
//            }
//        }
//
//        return false;
//    }
//
//    /**
//     * 获取AccessToken
//     */
//    private void obtainAccessToken() throws Exception {
//        // 构建请求参数
//        Map<String, String> params = new HashMap<>();
//        params.put("client_key", clientKey);
//        params.put("client_secret", clientSecret);
//        params.put("grant_type", "authorization_code");
//        // 注意：这里需要获取authorization_code，实际流程可能更复杂
//        // 此处简化处理，实际应通过OAuth流程获取
//
//        String paramStr = buildQueryString(params);
//        URL url = new URL(ACCESS_TOKEN_URL + "?" + paramStr);
//
//        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//        conn.setRequestMethod("GET");
//        conn.setRequestProperty("Referer", "https://creator.douyin.com");
//
//        try (Scanner scanner = new Scanner(conn.getInputStream(), StandardCharsets.UTF_8)) {
//            String response = scanner.useDelimiter("\\A").next();
//            JSONObject json = JSONObject.parseObject(response);
//
//            if (json.getIntValue("code") == 0) {
//                JSONObject data = json.getJSONObject("data");
//                accessToken = data.getString("access_token");
//                refreshToken = data.getString("refresh_token");
//                expiresIn = data.getLongValue("expires_in");
//                tokenCreateTime = System.currentTimeMillis();
//
//                logger.info("获取AccessToken成功，有效期: {}秒", expiresIn);
//
//                // 设置Token刷新任务
//                scheduleTokenRefresh();
//            } else {
//                throw new Exception("获取AccessToken失败: " + json.getString("message"));
//            }
//        }
//    }
//
//    /**
//     * 刷新AccessToken
//     */
//    private void refreshAccessToken() {
//        try {
//            logger.info("开始刷新AccessToken");
//
//            // 构建请求参数
//            Map<String, String> params = new HashMap<>();
//            params.put("client_key", clientKey);
//            params.put("refresh_token", refreshToken);
//            params.put("grant_type", "refresh_token");
//
//            String paramStr = buildQueryString(params);
//            URL url = new URL(ACCESS_TOKEN_URL + "?" + paramStr);
//
//            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//            conn.setRequestMethod("GET");
//            conn.setRequestProperty("Referer", "https://creator.douyin.com");
//
//            try (Scanner scanner = new Scanner(conn.getInputStream(), StandardCharsets.UTF_8)) {
//                String response = scanner.useDelimiter("\\A").next();
//                JSONObject json = JSONObject.parseObject(response);
//
//                if (json.getIntValue("code") == 0) {
//                    JSONObject data = json.getJSONObject("data");
//                    accessToken = data.getString("access_token");
//                    refreshToken = data.getString("refresh_token");
//                    expiresIn = data.getLongValue("expires_in");
//                    tokenCreateTime = System.currentTimeMillis();
//
//                    logger.info("刷新AccessToken成功，有效期: {}秒", expiresIn);
//                } else {
//                    logger.error("刷新AccessToken失败: {}", json.getString("message"));
//                    // 刷新失败，尝试重新获取
//                    obtainAccessToken();
//                }
//            }
//        } catch (Exception e) {
//            logger.error("刷新AccessToken异常", e);
//        }
//    }
//
//    /**
//     * 定时刷新AccessToken
//     */
//    private void scheduleTokenRefresh() {
//        // 在Token过期前10分钟刷新
//        long initialDelay = (expiresIn - 600) * 1000;
//        scheduler.scheduleAtFixedRate(this::refreshAccessToken, initialDelay, expiresIn * 1000, TimeUnit.MILLISECONDS);
//    }
//
//    /**
//     * 启动直播间评论监听
//     */
//    private void startCommentListener() {
//        // 每3秒获取一次评论
//        scheduler.scheduleAtFixedRate(() -> {
//            try {
//                fetchLiveComments();
//            } catch (Exception e) {
//                logger.error("获取直播间评论异常", e);
//            }
//        }, 0, 3, TimeUnit.SECONDS);
//    }
//
//    /**
//     * 获取直播间评论数据
//     */
//    private void fetchLiveComments() throws Exception {
//        if (accessToken == null || roomId == null) {
//            logger.warn("AccessToken或roomId为空，无法获取评论数据");
//            return;
//        }
//
//        // 构建请求参数
//        Map<String, String> params = new HashMap<>();
//        params.put("access_token", accessToken);
//        params.put("room_id", roomId);
//        params.put("count", "20"); // 每次获取20条评论
//
//        String paramStr = buildQueryString(params);
//        URL url = new URL(LIVE_COMMENT_URL + "?" + paramStr);
//
//        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//        conn.setRequestMethod("GET");
//        conn.setRequestProperty("Referer", "https://creator.douyin.com");
//        conn.setRequestProperty("Authorization", "Bearer " + accessToken);
//
//        try (Scanner scanner = new Scanner(conn.getInputStream(), StandardCharsets.UTF_8)) {
//            String response = scanner.useDelimiter("\\A").next();
//            JSONObject json = JSONObject.parseObject(response);
//
//            if (json.getIntValue("code") == 0) {
//                JSONObject data = json.getJSONObject("data");
//                JSONArray comments = data.getJSONArray("comments");
//
//                if (comments != null && !comments.isEmpty()) {
//                    logger.info("获取到{}条直播间评论", comments.size());
//                    processComments(comments);
//                }
//            } else {
//                logger.warn("获取直播间评论失败: {}", json.getString("message"));
//
//                // 如果是Token失效，尝试刷新Token
//                if (json.getIntValue("code") == 10006) {
//                    refreshAccessToken();
//                }
//            }
//        }
//    }
//
//    /**
//     * 处理直播间评论
//     */
//    private void processComments(JSONArray comments) {
//        for (Object obj : comments) {
//            JSONObject comment = (JSONObject) obj;
//            String userId = comment.getString("user_id");
//            String userName = comment.getString("user_name");
//            String content = comment.getString("content");
//            long createTime = comment.getLongValue("create_time");
//
//            logger.info("用户[{}]({})在{}发表评论: {}", userName, userId, createTime, content);
//
//            // 这里可以添加业务逻辑，如保存到数据库、推送消息等
//            handleComment(userId, userName, content);
//        }
//    }
//
//    /**
//     * 处理单条评论（可扩展）
//     */
//    private void handleComment(String userId, String userName, String content) {
//        // 示例：打印评论信息
//        System.out.printf("[%s] %s: %s%n", userName, userId, content);
//
//        // 可以添加自定义逻辑：
//        // 1. 敏感词过滤
//        // 2. 关键词触发自动回复
//        // 3. 数据持久化
//        // 4. 实时数据分析
//    }
//
//    /**
//     * 构建URL查询参数
//     */
//    private String buildQueryString(Map<String, String> params) {
//        StringBuilder sb = new StringBuilder();
//        for (Map.Entry<String, String> entry : params.entrySet()) {
//            if (sb.length() > 0) {
//                sb.append("&");
//            }
//            try {
//                sb.append(entry.getKey())
//                        .append("=")
//                        .append(java.net.URLEncoder.encode(entry.getValue(), "UTF-8"));
//            } catch (Exception e) {
//                logger.error("编码参数异常", e);
//            }
//        }
//        return sb.toString();
//    }
//
//    /**
//     * 关闭服务
//     */
//    public void shutdown() {
//        scheduler.shutdown();
//        logger.info("抖音直播评论监听服务已关闭");
//    }
//
//    public static void main(String[] args) {
//        DouyinLiveCommentService service = new DouyinLiveCommentService();
//        service.startService("你的直播间ID");
//    }
//}
